package com.stu.day08.equals;

import java.util.Objects;

/**
 * getClass()不支持多态，要求类型完全匹配。
 * 在重写equals时,如果类允许继承，推荐 instanceof
 * 如果类不希望子类参与比较，使用 getClass()
 * @author zy
 * @date 2025/1/29 16:03
 */
class Cat extends Animal {
    private String name;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;  // 若o的编译时类型为Animal类,则转换成运行时类型Cat类
        return Objects.equals(name, cat.name);
    }
    // Object o = new Animal();
    // Cat cat = (Cat) o;  // 这里会抛出 ClassCastException，因为 o 是 Animal 不是 Cat
    @Override
    public int hashCode() {
        return Objects.hashCode(name);
    }
}

public class GetClassDemo {
    public static void main(String[] args) {
        Animal b = new Cat();

        System.out.println(b.getClass() == Cat.class);  // true
        System.out.println(b.getClass() == Animal.class);  // false
    }
}
